// 测试类型检查器
use crate::lexer::Lexer;
use crate::parser::Parser;
use crate::type_checker::TypeChecker;

#[test]
fn test_type_check() {
    let code = "篇章 测试\n\n引言\n毕\n\n正文\n    有 数 者，为 十。\n    有 文本 者，为 「墨言文心」。\n    有 结果 者，为 数 加 文本。\n    书 结果。\n毕\n\n结语\n毕\n";
    let mut lexer = Lexer::new_with_config(code, crate::config::InterpreterConfig::default());
    let tokens = lexer.tokenize().unwrap();
    let mut parser = Parser::new(tokens, "test".to_string(), code.to_string());
    let ast = parser.parse().unwrap();

    let mut type_checker = TypeChecker::new();
    type_checker.check(&ast).unwrap();

    // 应该有类型错误，因为不能将数字和字符串相加
    assert!(type_checker.has_errors());
}
